package com.terren.webdig.common.util;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.text.NumberFormat;

import com.terren.webdig.common.config.ConfigInfo;

/**
 * @项目名称：报告系统
 * @类名称：NumericalUtil
 * @类描述：数值转换工具类 @创建人： @创建时间：2017-04-27 @修改人： @修改时间： @备注：
 */
public class NumericalUtil {

	/**
	 * 增长率
	 */
	public static Double increase(Double d1, Double d2) {
		if (d1 == 0) {
			return 0.00;
		}
		if (d2 == 0) {
			return ConfigInfo.Pi;
		}
		Double increase = ((d1 - d2) / d2);
		return increase;
	}

	/**
	 * 增长率
	 */
	public static Long increase(Long int1, Long int2) {
		if (int1 == 0) {
			return new Long(0);
		}
		if (int2 == 0) {
			return ConfigInfo.Pi.longValue();
		}
		Double increase = ((int1.doubleValue() - int2.doubleValue()) / int2.doubleValue()) * 10000;
		return increase.longValue();
	}

	/**
	 * 保留2位小数返回字符串形
	 */
	public static String numFormat(Double num) {
		NumberFormat nf = NumberFormat.getInstance();
		nf.setMaximumFractionDigits(2);
		nf.setMinimumFractionDigits(2);
		return nf.format(num);
	}

	/**
	 * 保留2位小数百分比
	 */
	public static String numPercent(Double num) {
		String percent = numFormat(num * 100);
		return percent + "%";
	}

	/**
	 * double 除法
	 * 
	 * @param d1
	 * @param d2
	 * @param scale
	 *            四舍五入 小数点位数
	 * @return
	 */
	public static double div(double d1, double d2, int scale) {
		// 当然在此之前，你要判断分母是否为0，
		// 为0你可以根据实际需求做相应的处理
		BigDecimal bd1 = new BigDecimal(Double.toString(d1));
		BigDecimal bd2 = new BigDecimal(Double.toString(d2));
		return bd1.divide(bd2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
	}

	/**
	 * 求两个整数的商 返回double型
	 */
	public static Double numRatio(Long int1, Long int2) {
		Double ratio = int1 > 0 && int2 > 0 ? int1.doubleValue() / int2.doubleValue() : 0;
		return ratio;
	}

	/**
	 * 求两个整数的百分比 返回String型
	 */
	public static String stringRatio(Long int1, Long int2) {
		String ratio = "";
		if (int1 == null || int2 == null || int1 <= 0 || int2 <= 0) {
			return "0.00%";
		}
		ratio = numPercent(int1.doubleValue() / int2.doubleValue());
		return ratio;
	}

	/**
	 * 
	 * /
	 * 
	 * /** 求数组中的最大值 返回其下标
	 */
	public static Integer maxNumber(Long[] array) {
		if (array == null || array.length < 1) {
			return 0;
		}
		Long max = new Long(0);
		Integer index = 0;
		for (int i = 0; i < array.length; i++) {
			if (array[i] == null) {
				continue;
			}
			if (array[i] > max) {
				max = array[i];
				index = i;
			}
		}
		return index;
	}

	/**
	 * 保留2位小数 返回double型
	 */
	public static Double numFormatDouble(Double num) {
		if (num == null) {
			return 0.00;
		}
		DecimalFormat df = new DecimalFormat("#.00");
		return Double.valueOf(df.format(num));
	}

	/**
	 * 保留4位小数 返回double型
	 */
	public static Double numFormatDouble4(Double num) {
		if (num == null) {
			return 0.00;
		}
		DecimalFormat df = new DecimalFormat("#.0000");
		return Double.valueOf(df.format(num));
	}

	/**
	 * 保留两位小数
	 */
	public static String keepTwo(Long smal, Long big) {
		DecimalFormat df = new DecimalFormat("######0.00%");
		String fina = df.format(smal.doubleValue() * 1.0 / big.doubleValue());
		return fina;
	}

	/**
	 * 保留两位小数,返回百分比的绝对值，如果百分比为-12.11%，就返回12.11%
	 */
	public static String keepTwoAbs(Long smal, Long big) {
		DecimalFormat df = new DecimalFormat("######0.00%");
		String fina = df.format(smal.doubleValue() * 1.0 / big.doubleValue());
		if (fina.substring(0, 1).equals("-")) {
			return fina.substring(1, fina.length());
		}
		return fina;
	}

	/**
	 * 运算结果保留两位小数
	 */
	public static String keepTwoWithCount(Long a, Long b) {
		DecimalFormat df = new DecimalFormat("######0.00");
		String fina = "";
		Double A = Double.parseDouble(a + "");
		Double B = Double.parseDouble(b + "");
		if (A > B) {
			fina = df.format((A - B) * 100 / B);
		} else if (A < B) {
			fina = df.format((B - A) * 100 / B);
		}
		return fina;
	}

	/**
	 * 保留一位小数,没有四舍五入
	 * 
	 * @author wyc
	 */
	public static String keepOneFloor(Long lon) {
		DecimalFormat df = new DecimalFormat("######0.0");
		Double A = Double.parseDouble(lon + "");
		df.setRoundingMode(RoundingMode.FLOOR);
		String fina = df.format(A / 10000);
		return fina;
	}

	/**
	 * 保留一位小数,四舍五入
	 * 
	 * @author wyc
	 */
	public static String keepOne(Long lon) {
		DecimalFormat df = new DecimalFormat("######0.0");

		Double A = Double.parseDouble(lon + "");
		String fina = df.format(A / 10000);
		return fina;

	}

	/**
	 * 不保留小数
	 * 
	 * @param lon
	 * @return
	 * @author wyc
	 */
	public static String keepZero(Long lon) {
		Double A = Double.parseDouble(lon + "");
		Double B = A / 10000;
		String fina = B + "";
		int indexOf = fina.indexOf(".");
		String str = fina.substring(0, indexOf + 2);
		return str;
	}

	/**
	 * 保留一位小数,针对亿级的数 例如：2.5亿
	 */
	public static String keepOneFor(Long lon) {
		DecimalFormat df = new DecimalFormat("######0.0");
		Double A = Double.parseDouble(lon + "");
		String fina = df.format(A / 100000000);
		return fina;
	}

	/**
	 * 以#，###显示数字
	 */
	public static String changeNumber(Long number) {
		DecimalFormat df = new DecimalFormat("#,###");
		String str = "";
		Double value = number.doubleValue();
		if (value > 100000000) {
			str = keepOneFor(number) + "亿";
		} else {
			str = df.format(Math.round(value / 10000)) + "万";
		}
		return str;
	}

	/**
	 * 处理接口中获取到的date 知道##% 求1-##%
	 */
	public static String changePercent(String percent) {
		DecimalFormat df = new DecimalFormat("#,###0.00");
		String str = percent.replace("%", "");
		Double db = Double.parseDouble(str);
		str = df.format(100 - db);
		return str + "%";
	}

	/**
	 * 获取日均，四舍五入得到最后的整数。sum：总数；number：天数
	 */
	public static Long getAvg(Long sum, int number) {
		Long avg = Long.valueOf(new DecimalFormat("0").format(sum * 1.0 / number));
		return avg;
	}

	/**
	 * 阿拉伯数字和文字转换
	 * 
	 * @author wyc
	 */
	public static String numberChange(Integer number) {
		String str = "";
		if (number == 1) {
			str = "一";
		}

		if (number == 2) {
			str = "二";
		}
		if (number == 3) {
			str = "三";
		}
		if (number == 4) {
			str = "四";
		}
		if (number == 5) {
			str = "五";
		}
		if (number == 6) {
			str = "六";
		}
		if (number == 7) {
			str = "七";
		}
		if (number == 8) {
			str = "八";
		}
		if (number == 9) {
			str = "九";
		}
		if (number == 10) {
			str = "十";
		}
		return str;
	}

	/**
	 * 访问者省份中 过滤直辖市
	 * 
	 * @param city
	 * @return
	 * @author wyc
	 */
	public static boolean province_city(String city) {
		boolean flag = false;
		String[] pointCity = { "北京", "上海", "重庆", "天津" };
		for (int i = 0; i < pointCity.length; i++) {
			if (city.equals(pointCity[i])) {
				flag = true;
			}

		}
		return flag;
	}

}
